import express from 'express';
import User from '../models/User.js';
import { authenticateToken, isAdmin } from '../middleware/auth.js';

const router = express.Router();

// 获取用户列表（仅管理员可访问）
router.get('/', authenticateToken, isAdmin, async (req, res) => {
  try {
    // 获取所有用户，但不返回密码字段
    const users = await User.find({}, '-password');
    res.json(users);
  } catch (error) {
    console.error('获取用户列表失败:', error);
    res.status(500).json({ message: '服务器错误' });
  }
});

// 创建新用户（仅管理员可访问）
router.post('/', authenticateToken, isAdmin, async (req, res) => {
  try {

    const { username, password, role } = req.body;

    // 验证必填字段
    if (!username || !password) {
      return res.status(400).json({ message: '用户名和密码为必填项' });
    }

    // 检查用户名是否已存在
    const existingUser = await User.findOne({ username });
    if (existingUser) {
      return res.status(400).json({ message: '用户名已存在' });
    }

    // 创建新用户
    const user = new User({
      username,
      password,
      role: role || 'user'
    });

    await user.save();

    // 返回用户信息（不包含密码）
    const userResponse = user.toObject();
    delete userResponse.password;
    res.status(201).json(userResponse);
  } catch (error) {
    console.error('创建用户失败:', error);
    res.status(500).json({ message: '服务器错误' });
  }
});

// 更新用户信息（仅管理员可访问）
router.put('/:id', authenticateToken, isAdmin, async (req, res) => {
  try {
    const { username, password, role } = req.body;
    const userId = req.params.id;

    // 查找用户
    const user = await User.findById(userId);
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 如果要更改用户名，检查新用户名是否已存在
    if (username && username !== user.username) {
      const existingUser = await User.findOne({ username });
      if (existingUser) {
        return res.status(400).json({ message: '用户名已存在' });
      }
      user.username = username;
    }

    // 更新密码（如果提供了新密码）
    if (password) {
      user.password = password;
    }

    // 更新角色（如果提供了新角色）
    if (role) {
      user.role = role;
    }

    await user.save();

    // 返回更新后的用户信息（不包含密码）
    const userResponse = user.toObject();
    delete userResponse.password;
    res.json(userResponse);
  } catch (error) {
    console.error('更新用户失败:', error);
    res.status(500).json({ message: '服务器错误' });
  }
});

// 删除用户（仅管理员可访问）
router.delete('/:id', authenticateToken, isAdmin, async (req, res) => {
  try {

    const userId = req.params.id;

    // 查找并删除用户
    const user = await User.findByIdAndDelete(userId);
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    res.json({ message: '用户删除成功' });
  } catch (error) {
    console.error('删除用户失败:', error);
    res.status(500).json({ message: '服务器错误' });
  }
});

export default router;